#include <iostream>
using namespace std;
#include "SmartPtr.hpp"

//#include <boost/shared_ptr.hpp> //Зачем включать, для сравнения?
//Как я догадываюсь, это стандартный аналог того, что я делаю, не так ли?

struct Base {};
struct Derived : Base {};
struct Derived2 : private Base {};

int main()
{
   //////////////////////////////////////////////////////////////////////////
   /* see comments below

*/

   {
      // VL it crashes!
      // fixed.
      SmartPtr<int> a(new int);
      SmartPtr<int> b(a);
   }

   {
      // VL and C++ compiller: no appropriate default constructor available
      // fixed.
      SmartPtr<int> a;
   }
   //////////////////////////////////////////////////////////////////////////
   
    SmartPtr<Derived> pd(new Derived);
    SmartPtr<Base> pb = pd; // корректно
    //SmartPtr<Base> pb2 (new Derived2()); // некорректно
    return 0;
}
